alert('我是一个弹窗');
// //JS中的变量声明
var age1;
let age2;
const age3 = 1;
/*
* 以上三种方法都是对变量的声明，但是含义不同
* 用var声明的变量会存在变量提升，而且除了在函数中声明的变量仅在函数内有效，其他地方声明的变量都是全局有效
* 用let声明的变量不存在变量提升，而且let声明的变量仅在let所在的代码块中有效，且在同一作用域中时不允许重复声明
* const表示常量，在声明时必须赋值否则无法声明，const实际上保证的并不是变量的值不得改动，而是变量指向的那个内存地址所保存的数据不得改动
*     对于简单类型的数据，值就保存在变量指向的那个内存地址，因此等同于常量
*     对于复杂类型的数据，变量指向的内存地址，保存的只是一个指向实际数据的指针，const只能保证这个指针是固定的，并不能确保改变量的结构不变
*
* 能用const的情况尽量使用const，其他情况下大多数使用let，避免使用var
* */

alert(age3);//以弹窗的形式将变量中的内容进行输出

{//使用变量存储数据，let声明的变量将只在他所在的代码块中有效
    let name = '张三';
    let address = '第三监狱';
    let age = 16;
    let email = '43432423@qq.com';
    let salary = 2000;
    console.log(name);//将变量输出到控制台供程序员查看
    console.log(address);
    console.log(age);
    console.log(email);
    console.log(salary);
}

{
    let a1 = 10;
    a1 = 20;
    console.log(a1);
    //最终a1的值会被20覆盖，这是因为更新变量特性，最后一次赋值会覆盖掉前面的值
}

{
    //可以同时声明多个变量
    let name = '张三',age = 18,address = '蒙德';
    //不同的变量用逗号隔开，最后还是以分号结尾
}

{
//    更换两个变量的值
    let a = 1;
    let b = 2;
    let c = 0;
    c = a;
    a = b;
    b = c;
    console.log(a);
    console.log(b);
}

{//当变量只声明不赋值时打印出来会显示什么？
    let a1;
    console.log(a1);
    //会在控制台上打印一个undefined（未定义的），即如果不赋值，变量不会拥有默认值且无法使用

    //当变量不声明只赋值会发生什么
    a3=10;
    console.log(a3);
    //不声明也是可以使用的，但是会变成全局变量，不建议这么做，所以每次使用变量前都建议进行声明

    //当变量不声明不赋值直接使用会发生什么？
    console.log(a2);
    //会直接报错（a2 is not defined）变量未找到，即没有声明
    //当程序报错后，将不再向下执行
}

